﻿/**
作者：胡进平
功能：日常验证类
时间：2008-07-19
*/

var Validator=new sg_validator();

function sg_validator()
{
    
}

/// <summary>
/// 必填字段验证
/// </summary>
/// <param name="control">要验证的控件</param>
/// <param name="message">弹出信息</param>
/// <returns>true|false</returns>
sg_validator.prototype.Required=function(control,message)
{
    if(control==null)
        return false;
    if(control.value.trim()=='')
    {
        if(message !='' && message !=null)
            alert(message);
        else
            alert('该项不能为空');
        if(control.type)
        if(control.type !="hidden")
            control.focus();
        control.value='';
        return false;
    }   
    return true;
}
/// <summary>
/// 长度验证
/// </summary>
/// <param name="control">要验证的控件</param>
/// <param name="message">弹出信息</param>
/// <returns>true|false</returns>
sg_validator.prototype.Length=function(control,message,length)
{
    if(control==null)
        return false;
    if(control.value.trim()=='')
    {
        if(message !='' && message !=null)
            alert(message);
        else
            alert('该项不能为空');
        if(control.type)
        if(control.type !="hidden")
            control.focus();
        control.value='';
        return false;
    }  
    if(strlen(control.value)>length)
    {
        alert('该项的字符长度限制在'+length+'个以内！');
        if(control.type)
        if(control.type !="hidden")
            control.focus();
        control.value=curStr(control.value,length);
        return false;
    }
    return true;
}
/// <summary>
/// 类型验证
/// </summary>
/// <param name="control">要验证的控件</param>
/// <param name="type">验证类型</param>
/// <param name="message">弹出信息</param>
/// <param name="minvalue">最小值</param>
/// <param name="maxvalue">最大值</param>
/// <returns>true|false</returns>
sg_validator.prototype.Type=function(control,type,message,minvalue,maxvalue)
{
    if(control==null || type==null)
        return false;
    if(type.toLowerCase()=='number')
    {
        if(isNaN(parseFloat(control.value)))
        {
            if(message !='' && message !=null)
                alert(message);
            else
                alert('请输入数字');
            if(control.type)
            if(control.type !="hidden")
                control.focus();
            control.value='';
            return false;
        }
        else if(parseFloat(control.value)<parseFloat(minvalue) || parseFloat(control.value)>parseFloat(maxvalue))
        {
            if(message !='' && message !=null)
                alert(message);
            else
                alert('输入的数字不在指定范围');
            if(control.type)
            if(control.type !="hidden")
                control.focus();
            control.value='';
            return false;
        }
        else
            return true;
    }
    else if(type.toLowerCase()=='phone')
    {
        if(!this.Regex(control,/\d{3}-\d{8}|\d{4}-\d{7}/,'请输入指定格式的电话号码！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='credit')
    {
        if(!this.Regex(control,/\d{15}|\d{18}/,'请输入正确的身份证号码！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='qq')
    {
        if(!this.Regex(control,/[1-9][0-9]{4,}/,'请输入正确的QQ号码！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='url')//url验证有点问题
    {
        if(!this.Regex(control,'/[a-zA-z]+://[^\s]*/','请输入正确的url地址！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='date')
    {
        if(!this.Regex(control,/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/,'请输入正确的日期！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='email')
    {
        if(!this.Regex(control,/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,'请输入正确的Email地址！'))
            return false;
        else
            return true;
    }
    else if(type.toLowerCase()=='zipcode')
    {
        if(!this.Regex(control,/[1-9]\d{5}(?!\d)/,'请输入正确的邮政编码！'))
            return false;
        else
            return true;
    }    
    else
        return true;
}

/// <summary>
/// 类型验证
/// </summary>
/// <param name="control">要验证的控件</param>
/// <param name="regex">要匹配的正则表达式</param>
/// <param name="message">弹出信息</param>
/// <returns>true|false</returns>
sg_validator.prototype.Regex=function(control,regex,message)
{
     if(control==null || regex==null)
        return false;
 
     if(!regex.test(control.value))
     {
        if(message !='' && message !=null)
            alert(message);
        else
            alert('请输入指定格式');
        if(control.type)
        if(control.type !="hidden")
            control.focus();
        control.value='';
        return false;
     }
     return true;
}

sg_validator.prototype.IsNumber = function(value)
{
    var regex = /^\d+$/;
    return regex.test(value);
}

//解析字符中的数字
sg_validator.prototype.ParseNumber = function(value)
{
    var regex = /\d+/;
    if (regex.test(value))
    {
        var arr = regex.exec(value);
        return arr.join('');
    }
    return 0;
}

//检查首字符是否是英文字符
sg_validator.prototype.IsEnChar=function(control,message)
{
    if(control==null)
        return false;
    
    var str=control.value;
    if(str.charCodeAt(0)>=97 && str.charCodeAt(0)<=122)
        return true;
    if(str.charCodeAt(0)>=65 && str.charCodeAt(0)<=90)
        return true;
        
    if(message !='' && message !=null)
        alert(message);
    else
        alert('请输入指定格式');
    return false;
}

/// <summary>
/// 计算（中英文）字符长度
/// </summary>
function strlen(str) {
    var len = 0;
    for (var i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 255) len += 2; else len ++;
    }
    return len;
}

/// <summary>
/// 截取指定长度的（中英文）字符
/// </summary>
function curStr(str,length)
{
    var position=0;
    var result=[];
    for (var i = 0; i < str.length; i++)
    {
        if(position>=length)
            break;
        if (str.charCodeAt(i) > 255)
        {
            position += 2;
            result.push(str.substr(i,1));
        }
        else
        {
            position++;
            result.push(str.substr(i,1));
        }
    }
    return result.join("");
}

function trimStart(str,chr)
{
    if(str.length==0) return '';
    if(str.substr(0,1)==chr) str = str.substr(1);
    return str;
}
function trimEnd(str,chr)
{
    if(str.length==0) return '';
    if(str.substr(str.length-1,1)==chr) str=str.substr(0,str.length-1);
    return str;
}
function trim(str,chr)
{
    if(str.length==0) return '';
    if(str.substr(0,1)==chr) str=str.substr(1);
    if(str.substr(str.length-1,1)==chr) str=str.substr(0,str.length-1);
    return str;
}

function parseDate(strDate)
{
    var d = [];
    if (strDate.indexOf('-') > 0)
    {
        d.push(strDate.split('-')[2]);
        d.push(strDate.split('-')[1]);
        d.push(strDate.split('-')[0]);
        return Date.parse(d.join('/'));
    }
    return null;
}

function encode(str)
{
    if(encodeURIComponent)
       return  encodeURIComponent(str);
    else
       return  escape(str);
}

function XmlDocument()
	{
		var xmldoc = null;
		if(typeof(window.ActiveXObject) != 'undefined')
		{	
			try
			{
				//xmldoc = new ActiveXObject("MSXML2.DOMDocument.5.0");
			}
			catch(e)
			{
			
			}
			if(xmldoc==null)
				xmldoc = new ActiveXObject("Microsoft.XMLDOM");
		}
		else
		{
			xmldoc = document.implementation.createDocument("", "doc", null)
		}
		return xmldoc;	
	}